﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once

#include "GcmpModelInterface.h"

namespace gcmp
{
    class IElement;
    class GraphicsNodeId;

    /// \brief 节点的Id历史查询
    ///
    /// 根据当前几何元素Id，查找被扣减分裂前的最初始几何元素Id
    /// 根据最初始的几何元素Id，查找被扣减分裂后的所由几何元素Id
    class GCMP_MODEL_INTERFACE_EXPORT GraphicsNodeIdHistoryUtils
    {
    public:
        /// \brief 根据初始的GraphicsNodeId找当前的GraphicsNodeId
        ///
        /// 在一个Element中，根据最初始的几何元素(Face,Edge)Id，查找被扣减分裂出的所有几何元素Id
        /// \param pElement 当前Element
        /// \param rootGraphicsNodeId 最初始几何元素Id
        /// \param currentGraphicsNodeIds 被扣减分裂出的所有几何元素Id
        /// \return true，查找成功；false,查找失败
        static  bool GetCurrentGraphicsNodeId(const IElement* pElement, const GraphicsNodeId& rootGraphicsNodeId, std::vector<GraphicsNodeId>& currentGraphicsNodeIds);

        
        /// \brief 根据当前GraphicsNodeId找初始的GraphicsNodeId
        ///
        /// 在一个Element中，根据当前的几何元素Id，查找被扣减分裂前的最初始几何元素(Face, Edge)Id
        /// \param pElement 当前Element
        /// \param currentGraphicsNodeId 当前的几何元素Id
        /// \param rootGraphicsNodeId 被扣减分裂前的最初始几何元素Id
        /// \return true，查找成功；false,查找失败
        static bool GetRootGraphicsNodeId(const IElement* pElement, const GraphicsNodeId& currentGraphicsNodeId, GraphicsNodeId& rootGraphicsNodeId);

    };

}

